<?php
/**
 * Game_Event
 *
 * Класс Game_Event отвечает за обработку событий
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Game_Event extends ActiveRecord {
	
	protected static $_tableName = 'game_event';
	protected static $_pkName = 'ID_game_event';
	
	/**
	 * Метод получает список еще незавершенных событий
	 */
	public static function getUnfinishedEvents() { 
		$objGameEvent = new Game_Event();
		$arrGameEvents = $objGameEvent->find('all', array(
			'conditions' => '`event_time` <= NOW()',
			'order' => '`event_time` ASC, `ID_game_event` ASC'
			,'limit' => 1
		));

		self::_finishGameEvents($arrGameEvents);
	}
	
	/**
	 * Метод завершает переданные события произвольных типов
	 * 
	 * @param array $arrEvents
	 * @return boolean
	 */
	private static function _finishGameEvents(array &$arrEvents) {
		if (!$arrEvents) return false;
		$arrFinishedEventIds = array();
		// Обрабатываем все события в отдельности
		foreach ($arrEvents as $arrEvent) {
			$arrFinishedEventIds[] = $arrEvent['ID_game_event'];
			if (!intval($arrEvent['amount'])) continue;
			$objEventItem = Game_Event_ItemCreator::initBuildingItem(new Game_Event($arrEvent));
			//if (!is_a($objEventItem, 'Game_Event_Unit')) 
			$objEventItem->finish(false);
		}
		// Удаляем обработанные события
		self::_deleteEvents($arrFinishedEventIds);
	}
	
	/**
	 * Удаляет группу событий
	 * 
	 * @param array  $arrEventsIds
	 */
	private static function _deleteEvents(array &$arrEventsIds) {
		if (!$arrEventsIds) return false;
		$stmt = "DELETE FROM `game_event` WHERE `ID_game_event` IN(" . implode(',', $arrEventsIds) . ")";
		$objDB = Service_Database::instance();
		$objDB->query($stmt);
	}
		
	
	/**
	 * Получает время завершения последнего события определенного типа
	 * 
	 * @param string $eventType
	 */
	public static function getPlaceLastEventTime($eventType = 'unit') {
		$objGeneral = Game_General::instance();
		
		$stmt = "
			SELECT 
				`event_time_additional_end` 
			FROM `game_event` 
			WHERE 
			`ID_place` = '" . $objGeneral->objPlace->id . "' AND
			`ID_user` = '" . $objGeneral->objUser->id . "' AND
			`event_type` = '" . $eventType . "' 
		";
		$objDB = Service_Database::instance();
		return $objDB->selectSimpleField($stmt);
	}
	
}
?>